WorkflowsをCloud Schedulerでスケジュール実行する
概要
Workflowsを起動する方法はgcloudコマンドで起動したり、Cloud Run関数で起動したり、Cloud Schedulerで起動したりなどいろいろな方法があると思います。
そんな中で今回はよくある手法と思われるCloud SchedulerからのWorkflows起動をやってみたいと思います。
やりたいこと
- WorkflowsをCloud Schedulerで起動したい
※起動するワークフローは作成済の想定です
やってみる
準備
Cloud SchedulerがWorkflowsを起動できるようにサービスアカウントを作成します。
適当な名前でサービスアカウントを作成します。
gcloud iam service-accounts create サービスアカウント名
Workflowsを呼び出すための権限workflows.invoker
を作成したサービスアカウントへ付与します。
gcloud projects add-iam-policy-binding プロジェクトID \
--member serviceAccount:サービスアカウント名@プロジェクトID.iam.gserviceaccount.com \
--role roles/workflows.invoker
サービスアカウントが作成できたらスケジューラ設定をします。
コマンドでスケジューラ設定する
以下のコマンドで作成します。
gcloud scheduler jobs create http
最低限の設定をしたサンプルは以下となります。
gcloud scheduler jobs create http スケジュール名 \
--schedule="20 20 * * *" \
--uri="https://workflowexecutions.googleapis.com/v1/projects/プロジェクトID/locations/リージョン/workflows/ワークフロー名/executions" \
--time-zone="Asia/Tokyo" \
--oauth-service-account-email="サービスアカウント名@プロジェクトID.iam.gserviceaccount.com" \
--location=asia-northeast1
簡単に項目の説明をします。
項目名 | 説明 |
---|---|
schedule | スケジュール実行タイミング。cron形式で指定。サンプルは毎日20時20分に実行 |
uri | ワークフロ−のURI。作成済ワークフローの名前やプロジェクトIDをもとに組み立てます |
time-zone | タイムゾーン。日本標準時の場合はAsia/Tokyo を指定。他のタイムゾーンを指定する場合はこのリンクからTZ identifier をもとに探します |
oauth-service-account-email | サービスアカウントのメールアドレスを指定します |
location | ワークフローがデプロイされているリージョンを指定します |
上記を実行するとスケジューラ設定されます。
gcloud scheduler jobs list
にて一覧取得して設定が存在するか確認してみます(スケジューラ設定状況によってはさきほど設定したもの以外も出力されます)。
$ gcloud scheduler jobs list --location=asia-northeast1
ID: test
LOCATION: asia-northeast1
SCHEDULE (TZ): 20 20 * * * (Asia/Tokyo)
TARGET_TYPE: HTTP
STATE: ENABLED
意図した設定通りでした。Workflowsのワークフロー詳細 > トリガーからも確認することができます。
Workflowsのコンソールからスケジューラ設定してみる
ワークフローの詳細の画面で編集
を押下します。
画面最下部の新しいトリガーを追加
を押下します。
Cloud Scheduler
を選択します。
スケジュール名や頻度などを設定します。。
先ほどコマンドで設定した時と同じですので説明は割愛します。
続行
を押下するとログレベルやサービスアカウントの設定になるので最初に作成したサービスアカウントを指定します。
作成ボタンを押下するとスケジュール設定が作成されます。
問題ない流れだと思います。
補足
Workflowsのコンソールやコマンドで作成したスケジューラ設定はCloud Schedulerのコンソールからも確認することができます。
所感
Workflowsを起動する方法はたくさんありますが、Cloud Schedulerから起動することが多いと思います。
特に難しい内容はありませんでしたが、コマンドで作成する時タイムゾーンのデフォルトはUTCになっているようなので指定を忘れないようにしたほうがいいなと思いました。
--time-zone=TIME_ZONE; default="Etc/UTC"
Specifies the time zone to be used in interpreting --schedule. The value of this field must be a time zone name from the tz database (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
Note that some time zones include a provision for daylight savings time. The rules for daylight saving time are determined by the chosen time zone.
For UTC use the string "utc". Default is "utc".
スケジュールの解釈で使用するタイムゾーンを指定します。このフィールドの値は、tzデータベース(https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)のタイムゾーン名でなければなりません。
タイムゾーンによっては、サマータイムの規定があることに注意してください。サマータイムのルールは、選択したタイムゾーンによって決定される。
UTCの場合は文字列 「utc」を使用する。デフォルトは 「utc」です。 (DeepL翻訳)
コマンドの引数を省略したときに、意図せずデフォルト値が設定されてしまうということは障害にもつながりかねないので気をつけたいですね。
以上です。それではまた。ナマステー
参考